#include<iostream>
#include <stdint.h>
using namespace std;
//继承
// class Person{
// public:
//    void print()
//    {
//        cout<<age<<" "<<name<<endl;
//    }
//    int age=0;
//    string name="Peter";
//    string address;
//    int tel;
// };
// class Student:public Person
// {
// public:
//    int _stuid;
// };
//int main()
//{
//    double i;
//    int j=0;
//    i=j;
//    Student s1;
//    Person p1;
//    //切割，赋值兼容转换
//    p1=s1;
//    //s1=p1;//父不给子
//    s1.print();
//    //验证没有产生强制类型转换，而是切片
//    Person &p2=s1;
//    p2.name="张三";
//    s1.print();
//    Person * ptrp=&s1;
//    ptrp->name="peter";
//    s1.print();
//    return 0;
//}
//继承中的作用域
//隐藏/重定义 函数名相同则构成条件
//重载在同一个作用域
//class Person{
//public:
//    void print()
//    {
//        cout<<age<<" "<<name<<endl;
//    }
//    int age=0;
//    string name="Peter";
//    string address;
//    int tel;
//};
//class Student:public Person
//{
//public:
//void print()
//{
//    cout<<"student";
//}
//    int _stuid;
//    int age=10;
//};
//int main()
//{
//    Student s1;
//    s1.print();
//    s1.Person::print();
//    cout<<s1.age<<endl;
//    cout<<s1.Person::age<<endl;
//}
// class person
// {
// public:
//     person(const char *name="peter")
//     :_name(name)
//     {
//         cout<<"person()";
//     }
//     person(const person&p1)
//     :_name(p1._name)
//     {
//         cout<<"person(const Person& P)"<<endl;
//     }
//     person& operator=(const person&p)
//     {
//         cout<<"person operator=(const person&p)"<<endl;
//         if(this!=&p)
//             _name=p._name;
//         return *this;
//     }
//     ~person()
//     {
//         cout<<"~person()"<<endl;
//     }

//     string _name;
     
// };
// class student:public person
// {
// public:
//     student(const char*name="zhangsan",int id=0)
//     :person(name),
//     _id(id)
//     {
//         cout<<"student()"<<endl;
//     }

//     student(const student&s1)
//     :person(s1),
//     _id(s1._id)
//     {}

//     student& operator=(const student& s1)
//     {
//         if(this!=&s1)
//         {
//             //出现隐藏，想要调用父类的=
//             person::operator=(s1);
//             _id=s1._id;
//         }
//         return *this;
//     }
//     ~student()
//     {
//         //为了保持先初始化后析构的顺序，此时不需要手动释放父类的 子类释放完会自动调用
//         //
//         cout<<"~student"<<endl;
//         delete ptr;
//     }
//     void print()
//     {
//         cout<<_id<<" "<<_name<<endl;
//     }
// private:
//     int _id;
//     int *ptr=new int;
// };

// int main()
// {
//     student s1;
//     s1.print();
// }

//静态成员继承使用权不继承所有权属于父类，在派生类中不拷贝
//class person{
//public:
//    person()
//    {
//        cout<<count++;
//    }
//    static int count;
//};
//int person::count=1;
//class student:public person
//{
//
//};
//int main()
//{
//    student s1;
//    cout<<s1.count;    
//} 

//多继承
class person
{
public:
    int _age;
};
class student:virtual public person
{
public:
    int _sid;
};
class teacher:virtual public person
{
public:
    int _tid;
};
class assistant:public student,public teacher{
public:
    int _gra;
};
class A{
    public:
    int _a;
    A(int a=10)
    :_a(a)
    {

    }
};
class B:virtual public A
{
    public:
    int _b;
    B(int b=10)
    :_b(b)
    {

    }
};
class C:virtual public A
{
    public:
    int _c;
    C(int c=10)
    :_c(c)
    {

    }
};
class D:virtual public C
{
    public:
        int _d;
    D(int d=10)
    :_d(d)
    {

    }
};
int main()
{
 
   
   // assistant a1;

   // a1._age=1;
   // a1._age=2;
   // cout<<a1._age; 

}